package me.xinping.libs.utils

import android.os.AsyncTask

/**
 * 异步任务通用类
 */
class FAsyncTask<T>(private val mIFAsync: IFAsync<T>) : AsyncTask<Void, Void, T>() {

    override fun doInBackground(vararg params: Void): T {
        return mIFAsync.execute()
    }

    override fun onPostExecute(o: T) {
        mIFAsync.executeFinish(o)
    }

    /**
     * 回调接口
     *
     * @param <H>执行的数据类型
    </H> */
    interface IFAsync<H> {
        /**
         * 在此方法中执行
         *
         * @return 查询后的结果；该结果先在
         * [android.os.AsyncTask.doInBackground]方法中返回
         */
        fun execute(): H

        /**
         * 执行结果
         *
         * @param result 执行结果
         * [FAsyncTask.IFAsync]时指定的类型
         */
        fun executeFinish(result: H)
    }
}
